/*
 * Wave.h
 *
 *  Created on: 2011/05/28
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_SOUND_WAVE_H
#define INCLUDED_NTENGINE_SOUND_WAVE_H

#include "NTEngine/NTEngine.h"

namespace NTEngine {
namespace Sound {

/**
 * @brief リニアPCMバッファ
 */
class Wave {
public:

	/**
	 * @brief ファイル名から作成
	 */
	static Wave create( const char* filename );

	/**
	 * @brief バッファから作成
	 */
	static Wave create( const unsigned char* buffer, unsigned size );

	/**
	 * @brief ロード終わった？
	 */
	bool isReady();

	/**
	 * @brief エラー起こってない？
	 */
	bool isError() const;

	Wave();
	~Wave();
	Wave( const Wave& );
	Wave& operator=( const Wave& );
	operator void*() const;
	void release();
	bool operator==( const Wave& ) const;
	bool operator!=( const Wave& ) const;
	int referenceCount() const;
private:
	class Impl;
	friend class Player;
	Impl* mImpl;
};

} // namespace Sound
} // namespace NTEngine

#endif // INCLUDED_NTENGINE_SOUND_WAVE_H
